/**
 * @作者 zxy
 * @时间 2023-05-03 17:00
 * @说明 415. 字符串相加
 * 给定两个字符串形式的非负整数 num1 和num2 ，计算它们的和并同样以字符串形式返回。
 * 你不能使用任何內建的用于处理大整数的库（比如 BigInteger）， 也不能直接将输入的字符串转换为整数形式。
 * 示例 1：
 * 输入：num1 = "11", num2 = "123"
 * 输出："134"
 * 示例 2：
 * 输入：num1 = "456", num2 = "77"
 * 输出："533"
 * 示例 3：
 * 输入：num1 = "0", num2 = "0"
 * 输出："0"
 */
public class Solution {
    /**
     * 执行用时:
     * 2 ms ,在所有Java提交中击败了38.18% 的用户
     * 内存消耗:
     * 42.6 MB ,在所有Java提交中击败了5 .08%的用户
     * @param num1
     * @param num2
     * @return
     */
    public String addStrings(String num1, String num2) {
        int n1 = num1.length();
        int n2 = num2.length();
        StringBuilder res = new StringBuilder();
        int x, y, carry = 0;
        for (int i = n1 - 1, j = n2 - 1; i >= 0 || j >= 0; i--, j--) {
            if (i >= 0) x = num1.charAt(i) - '0';
            else {
                if (carry == 0) {
                    res.insert(0, num2.substring(0, j + 1));
                    break;
                }
                x = 0;
            }
            if (j >= 0) y = num2.charAt(j) - '0';
            else {
                if (carry == 0) {
                    res.insert(0, num1.substring(0, i + 1));
                    break;
                }
                y = 0;
            }
            res.insert(0, (x + y + carry) % 10);
            carry = (x + y + carry) / 10;
        }
        if (carry == 1) res.insert(0, "1");
        return res.toString();
    }
}
